package music.utils.captcha;

import javax.imageio.ImageIO;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.awt.*;
import java.awt.image.BufferedImage;
import java.io.IOException;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.util.Random;

/**
 * Created by pc01 on 11/5/2014.
 */
@WebServlet("/Captcha.do")
public class CaptchaServletUtil extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {

        // captcha : 프로그램을 조작하는 대상이 인간인지 기계인지 판단하는 장치
        // 화면상에 인간이면 누구나 판별/식별가능한 문자/숫자/기호를 표시하고
        // 그것을 올바르게 입력해야 인간임이 확인
        // 구글 recaptcha : recaptcha.net



        // captcha에 출력할 난수 생성을 위해 Random 클래스 이용용
        Random r = new Random();
        System.out.println(r.nextLong());
        String token = Long.toString(r.nextLong(),36);
        String ch = token.substring(1, 7);

        // 생성된 captcha 문자를 세션에 등록
        req.getSession().setAttribute("captcha", ch);

        // 메모리에 이미지 영역 300 x 80 을 생성
        BufferedImage image = new BufferedImage(300, 80, BufferedImage.TYPE_INT_BGR);
        Graphics2D g2d = image.createGraphics();

        // 이미지에 출력할 글자 속성 설정
        g2d.setColor(Color.ORANGE);
        GradientPaint gp = new GradientPaint(30, 30, Color.ORANGE, 15, 25, Color.WHITE, true);
        g2d.setPaint( gp);
        g2d.setBackground( Color.MAGENTA);

        // 이미지에 출력할 글자체 속성 결정
        Font f = new Font( "Verdana", Font.CENTER_BASELINE, 55);
        g2d.setFont( f );

        // 이미지에 글자 그림
        g2d.drawString( ch, 10, 60);
        g2d.dispose();

        // 생성한 이미지를 스트림에 바이너리로 출력
        OutputStream out = res.getOutputStream();
        ImageIO.write(image, "png", out);
        out.flush();
        out.close();


    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        PrintWriter out = res.getWriter();
        out.write("POST 방식 지원 안함 ㅋㅋㅋ");
    }
}
